﻿using System;
using System.IO;

namespace Json2sdb
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.OutputEncoding = System.Text.Encoding.UTF8;

            while (true)
            {
                ShowMenu();
                string choice = Console.ReadLine();

                try
                {
                    switch (choice)
                    {
                        case "1":
                            RunFixedConverter();
                            break;
                        case "2":
                            RunDynamicConverter();
                            break;
                        case "3":
                            Console.WriteLine("再见！");
                            return;
                        default:
                            Console.WriteLine("❌ 无效选择，请输入 1、2 或 3");
                            break;
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"❌ 操作失败：{ex.Message}");
                }

                Console.WriteLine();
            }
        }

        static void ShowMenu()
        {
            Console.WriteLine("=== JSON 转 .sdb 工具 ===");
            Console.WriteLine("1. 固定结构转换（如 Person）");
            Console.WriteLine("2. 任意结构转换（自动推断）");
            Console.WriteLine("3. 退出");
            Console.Write("请选择功能 (1-3)：");
        }

        static void RunFixedConverter()
        {
            Console.WriteLine("选择输入方式：");
            Console.WriteLine("1. 使用内置示例数据");
            Console.WriteLine("2. 从 JSON 文件读取");
            Console.Write("请输入选择 (1/2)：");
            string choice = Console.ReadLine();

            string json;
            string dbFile = "fixed_output.sdb";

            if (choice == "2")
            {
                Console.Write("请输入 JSON 文件路径：");
                string filePath = Console.ReadLine().Trim();

                if (string.IsNullOrWhiteSpace(filePath) || !File.Exists(filePath))
                {
                    Console.WriteLine("❌ 文件不存在或路径无效！");
                    return;
                }

                FixedJsonToSdbConverter.ConvertFromFile<Person>(filePath, dbFile);

                Console.WriteLine($"✅ 固定结构转换完成：{Path.GetFullPath(dbFile)}");
            }
            else
            {
                // 使用内置示例
                json = @"
                [
                    { 'Id': 1, 'Name': '张三', 'Age': 25, 'City': '北京' },
                    { 'Id': 2, 'Name': '李四', 'Age': 30, 'City': '上海' }
                ]";

                FixedJsonToSdbConverter.Convert<Person>(json, dbFile);

                Console.WriteLine($"✅ 固定结构转换完成：{Path.GetFullPath(dbFile)}");
            }
        }

        static void RunDynamicConverter()
        {
            Console.WriteLine("选择输入方式：");
            Console.WriteLine("1. 使用内置示例数据");
            Console.WriteLine("2. 从 JSON 文件读取");
            Console.Write("请输入选择 (1/2)：");
            string choice = Console.ReadLine();

            string dbFile = "dynamic_output.sdb";

            if (choice == "2")
            {
                Console.Write("请输入 JSON 文件路径：");
                string filePath = Console.ReadLine().Trim();

                if (string.IsNullOrWhiteSpace(filePath) || !File.Exists(filePath))
                {
                    Console.WriteLine("❌ 文件不存在或路径无效！");
                    return;
                }


                DynamicSdbConverter.ConvertFromFile(filePath, dbFile);

                Console.WriteLine($"✅ 动态结构转换完成：{Path.GetFullPath(dbFile)}");
            }
            else
            {
                string json = @"
        [
            {
                ""id"": 1,
                ""name"": ""Alice"",
                ""age"": 30,
                ""address"": { ""city"": ""Beijing"" },
                ""tags"": [""dev"", ""sql""],
                ""active"": true
            },
            {
                ""id"": 2,
                ""name"": ""Bob"",
                ""age"": 25,
                ""address"": { ""city"": ""Shanghai"" },
                ""score"": 95.5
            }
        ]";

                DynamicSdbConverter.Convert(json, dbFile);

                Console.WriteLine($"✅ 动态结构转换完成：{Path.GetFullPath(dbFile)}");
            }
        }
    }
}